const express = require('express')

// 设置端口号
const PORT = process.env.PORT || 9000

// 引入mongodb
const { MongoClient } = require('mongodb')
// 设置远程数据库名
const uri = 'mongodb://106.75.26.59:27017'

const client = new MongoClient(uri)

const app = express()
// 配置解析表单请求体：application/json
app.use(express.json())
// 解析表单请求体：application/x-www-form-urlencoded
app.use(express.urlencoded())

// 注册用户
app.post('/register', async (req, res, next) => {
  try {
    // 1. 获取客户端注册数据
    const { userInfo } = req.body
    // console.log(userInfo)
    // 2. 数据验证
    if (!userInfo.name) {
      return res.status(422).json({
        error: '请设置登录用户名'
      })
    } else if (!userInfo.pwd) {
      return res.status(422).json({
        error: '请设置登录密码'
      })
    }

    // 3. 把验证通过的数据插入数据库中
    //    成功 -> 发送成功响应
    //    失败 -> 发送失败响应
    // 连接数据库
    await client.connect()
    const collection = client.db('user').collection('user')
    userInfo.createTime = new Date()
    // 注册用户
    const ret = await collection.insertOne(userInfo)

    // console.log('用户ret', ret)

    res.status(200).json({
      userInfo
    })
  } catch (error) {
    next(error)
  }
})
// 登录用户
app.post('/login', async (req, res, next) => {
  try {
    // 1. 获取客户端登录数据
    const { userInfo } = req.body
    // console.log(userInfo)
    // 2. 数据验证
    if (!userInfo.name) {
      return res.status(422).json({
        error: '请输入登录用户名'
      })
    } else if (!userInfo.pwd) {
      return res.status(422).json({
        error: '请输入登录密码'
      })
    }
    // 连接数据库
    await client.connect()
    const collection = client.db('user').collection('user')
    // 查询所有用户
    const userList = await collection.find().toArray()
    // console.log('用户列表', userList)
    userList.forEach(item => {
      if (item.name == userInfo.name && item.pwd == userInfo.pwd) {
        res.status(200).json({
          message: '登录成功',
          item
        })
      }
    })

    res.status(423).json({
      message: '登录失败',
      userInfo
    })
  } catch (error) {
    next(error)
  }
})

// 查询用户
app.get('/:name', async (req, res, next) => {
  try {
    // 连接数据库
    await client.connect()
    const collection = client.db('user').collection('user')
    // 查找用户
    const userInfo = await collection.findOne({
      name: req.params.name
    })
    
    res.status(200).json({
      userInfo
    })
  } catch (error) {
    next(error)
  }
})

app.listen(PORT, () => {
  console.log(`Server is running at http://localhost:${PORT}`)
})
